if (rc <= 0)
return -1;
- di->di_base = DART_DEF_BASE;
-
- if (strstr(compat, "u3")) {
- di->di_model = DART_U3;
- } else if (strstr(compat, "u4")) {
+ if (ofd_strstr(compat, rc, "u4"))
di->di_model = DART_U4;
- } else {
+ else if (ofd_strstr(compat, rc, "u3"))
+ di->di_model = DART_U3;
+ else {
DBG("%s: not a U3 or U4\n", __func__);
return -1;
}
+
+ di->di_base = DART_DEF_BASE;
+
/* FIXME: this should actually be the HT reg value */
di->di_window.dw_liobn = 0;
di->di_window.dw_base_hi = 0;
extern ofdn_t ofd_node_find_prev(void *mem, ofdn_t n);
extern void ofd_init(int (*write)(const char *, size_t len));
+static inline int ofd_strstr(const char *s, int len, const char *str)
+{
+ int l = strlen(str);
+ do {
+ int n;
+
+ if (len >= l && strstr(s, str))
+ return 1;
+
+ n = strnlen(s, len) + 1;
+ len -= strnlen(s, len) + 1;
+ s += n;
+ } while (len > 0);
+ return 0;
+}
+
#endif /* _OF_DEVTREE_H */